//
//  NSString+Tool.m
//  JFTwxsd
//
//  Created by Steven on 2018/9/21.
//  Copyright © 2018年 junfeiweiyejiaoyujituan. All rights reserved.
//

#import "NSString+Tool.h"

#import <objc/message.h>
@implementation NSString (Selector)
- (SEL)getSelector{
    return NSSelectorFromString(self);
}
@end

/**
 MD5加密相关
 */
#import<CommonCrypto/CommonDigest.h>
@implementation NSString (MD5)

- (NSString *)MD5{
    
    NSString *md5 = objc_getAssociatedObject(self, "NSString.MD5");
    if (md5 == nil) {
        
        //1.首先将字符串转换成UTF-8编码, 因为MD5加密是基于C语言的,所以要先把字符串转化成C语言的字符串
        const char *fooData = [self UTF8String];
        
        //2.然后创建一个字符串数组,接收MD5的值
        unsigned char result[CC_MD5_DIGEST_LENGTH];
        
        //3.计算MD5的值, 这是官方封装好的加密方法:把我们输入的字符串转换成16进制的32位数,然后存储到result中
        CC_MD5(fooData, (CC_LONG)strlen(fooData), result);
        /**
         第一个参数:要加密的字符串
         第二个参数: 获取要加密字符串的长度
         第三个参数: 接收结果的数组
         */
        
        //4.创建一个字符串保存加密结果
        NSMutableString *saveResult = [NSMutableString string];
        
        //5.从result 数组中获取加密结果并放到 saveResult中
        for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
            [saveResult appendFormat:@"%02x", result[i]];
        }
        /*
         x表示十六进制，%02X  意思是不足两位将用0补齐，如果多余两位则不影响
         DdLog("%02X", 0x888);  //888
         DdLog("%02X", 0x4); //04
         */
        md5 = saveResult;
    }
    return md5;
}

@end


@implementation NSString (Number)

- (NSString *)f2Str{
    NSNumber *number = @(self.floatValue);
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];
    formatter.numberStyle = NSNumberFormatterDecimalStyle;
    formatter.maximumFractionDigits = 2;
    return [formatter stringFromNumber:number];
}

@end















